<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>Definitions Template</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
		<meta name="viewport" content="width=device-width initial-scale=1">
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<meta http-equiv="Content-Language" content="en-gb">

<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
MathJax = {
	tex: {
		inlineMath: '$', '$'], ['\\(', '\\)'
	},
	svg: {
		fontCache: 'global'
	}
};
</script>
<script type="text/javascript" id="MathJax-script" async
	src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
</script>

<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
		
	</head>
	<body class="commentary-font">
		<nav role="navigation">
		<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../index.html">home</a></li>
</ul><h2>Compiler</h2><ul>
<li><a href="../structure.html">structure</a></li>
<li><a href="../inbuildn.html">inbuild</a></li>
<li><a href="../inform7n.html">inform7</a></li>
<li><a href="../intern.html">inter</a></li>
<li><a href="../services.html">services</a></li>
<li><a href="../secrets.html">secrets</a></li>
</ul><h2>Other Tools</h2><ul>
<li><a href="../inblorbn.html">inblorb</a></li>
<li><a href="../indocn.html">indoc</a></li>
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
<li><a href="../../../inweb/index.html">inweb</a></li>
<li><a href="../../../intest/index.html">intest</a></li>

</ul>
		</nav>
		<main role="main">
		<!-- Weave of 'Definitions Template' generated by Inweb -->
<div class="breadcrumbs">
    <ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">BasicInformKit</a></li><li><b>Definitions Template</b></li></ul></div>
<p class="purpose">Miscellaneous constant definitions, usually providing symbolic names for otherwise inscrutable numbers, which are used throughout the template layer.</p>

<ul class="toc"><li><a href="S-dfn.html#SP1">&#167;1. Identification</a></li><li><a href="S-dfn.html#SP2">&#167;2. Nothing</a></li><li><a href="S-dfn.html#SP3">&#167;3. Powers of Two</a></li><li><a href="S-dfn.html#SP4">&#167;4. Text Styles</a></li><li><a href="S-dfn.html#SP5">&#167;5. Colour Codes</a></li><li><a href="S-dfn.html#SP6">&#167;6. Window Numbers</a></li><li><a href="S-dfn.html#SP7">&#167;7. Function key codes</a></li><li><a href="S-dfn.html#SP8">&#167;8. Paragraphing Flags</a></li><li><a href="S-dfn.html#SP9">&#167;9. Descriptors in the Language of Play</a></li><li><a href="S-dfn.html#SP10">&#167;10. Auxiliary file structure</a></li><li><a href="S-dfn.html#SP11">&#167;11. Scope Searching Reasons</a></li><li><a href="S-dfn.html#SP12">&#167;12. Token Types</a></li><li><a href="S-dfn.html#SP13">&#167;13. GPR Return Values</a></li><li><a href="S-dfn.html#SP14">&#167;14. List Styles</a></li><li><a href="S-dfn.html#SP15">&#167;15. Lengths Of Time</a></li><li><a href="S-dfn.html#SP16">&#167;16. Empty Text</a></li><li><a href="S-dfn.html#SP17">&#167;17. Empty Table</a></li><li><a href="S-dfn.html#SP18">&#167;18. Empty Set</a></li><li><a href="S-dfn.html#SP19">&#167;19. Template Attributes</a></li><li><a href="S-dfn.html#SP20">&#167;20. Template Properties</a></li><li><a href="S-dfn.html#SP21">&#167;21. Formal Parameters</a></li></ul><hr class="tocbar">

<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Identification. </b></p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">BASICINFORMKIT</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">SERIAL_COMMA</span><span class="plain-syntax"> = </span><span class="identifier-syntax">BasicInformKit</span><span class="plain-syntax">`</span><span class="identifier-syntax">SERIAL_COMMA_CFGF</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Nothing. </b>This is defined automatically by the Inform 6 compiler, but not by other final
compilation platforms (such as C).
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="reserved-syntax">nothing</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Powers of Two. </b>I6 lacks support for logical shifts, and the Z-machine opcodes which bear
on this are not always well supported, so the I6 library has traditionally
used a lookup table for the values of \(2^{15-n}\) where \(0\leq n \leq 11\).
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">PowersOfTwo_TB</span>
<span class="plain-syntax">  --&gt; </span><span class="constant-syntax">$$100000000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$010000000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$001000000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$000100000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$000010000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$000001000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$000000100000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$000000010000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$000000001000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$000000000100</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$000000000010</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$000000000001</span><span class="plain-syntax">;</span>

<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">IncreasingPowersOfTwo_TB</span>
<span class="plain-syntax">  --&gt; </span><span class="constant-syntax">$$0000000000000001</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$0000000000000010</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$0000000000000100</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$0000000000001000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$0000000000010000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$0000000000100000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$0000000001000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$0000000010000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$0000000100000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$0000001000000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$0000010000000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$0000100000000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$0001000000000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$0010000000000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$0100000000000000</span>
<span class="plain-syntax">      </span><span class="constant-syntax">$$1000000000000000</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Text Styles. </b>These are the styles of text distinguished by the template layer, though
they are not required to look different from each other on any given VM.
The codes are independent of the VM targetted, though in fact they are
equal to Glulx style numbers as conventionally used. (The Z-machine renders
some as roman, some as bold, but for instance makes <span class="extract"><span class="extract-syntax">HEADER_VMSTY</span></span> and
<span class="extract"><span class="extract-syntax">SUBHEADER_VMSTY</span></span> indistinguishable to the eye.) Glulx's system of styles
is one of its weakest points from an IF author's perspective, since it is
all but impossible to achieve the text effects one might want &mdash; boldface,
for instance, or red text &mdash; and text rendering is almost the only area
in which it is clearly inferior to the Z-machine, which it was designed
to replace. Still, using these styles when we can will get the most out of
it, and for unornamental works Glulx is fine in practice.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">NORMAL_VMSTY</span><span class="plain-syntax">     = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">HEADER_VMSTY</span><span class="plain-syntax">     = </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">SUBHEADER_VMSTY</span><span class="plain-syntax">  = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ALERT_VMSTY</span><span class="plain-syntax">      = </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOTE_VMSTY</span><span class="plain-syntax">       = </span><span class="constant-syntax">6</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">BLOCKQUOTE_VMSTY</span><span class="plain-syntax"> = </span><span class="constant-syntax">7</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">INPUT_VMSTY</span><span class="plain-syntax">      = </span><span class="constant-syntax">8</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. Colour Codes. </b>While most colour numbers are defined through the basic colour kind in the
Architecture16/32Kits, these two colour codes are defined here instead.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">#</span><span class="identifier-syntax">Ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">TARGET_GLULX</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">BASIC_COLOUR_CURRENT</span><span class="plain-syntax"> = -2;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">BASIC_COLOUR_DEFAULT</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">Ifnot</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">BASIC_COLOUR_CURRENT</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">BASIC_COLOUR_DEFAULT</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">Endif</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. Window Numbers. </b>Although Glulx can support elaborate tessellations of windows on screen (if
the complexity of handling this can be mastered), the Z-machine has much
more limited resources in general, so the template layer assumes a simple
screen model: there are just two screen areas, the scrolling main window
in which commands are typed and responses printed, and the fixed status
line bar at the top of the screen.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">WIN_ALL</span><span class="plain-syntax">     = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">Both windows at once</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">WIN_STATUS</span><span class="plain-syntax">  = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">WIN_MAIN</span><span class="plain-syntax">    = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. Function key codes. </b>So that users of <span class="extract"><span class="extract-syntax">VM_KeyChar()</span></span> don't need to be aware of platform differences,
function key codes are mapped to these common codes.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_DELETE</span><span class="plain-syntax"> = </span><span class="constant-syntax">$0008</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_DOWN</span><span class="plain-syntax"> = </span><span class="constant-syntax">$2193</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_END</span><span class="plain-syntax"> = </span><span class="constant-syntax">$21F2</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_ESCAPE</span><span class="plain-syntax"> = </span><span class="constant-syntax">$001B</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_F1</span><span class="plain-syntax"> = </span><span class="constant-syntax">$EF01</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_F2</span><span class="plain-syntax"> = </span><span class="constant-syntax">$EF02</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_F3</span><span class="plain-syntax"> = </span><span class="constant-syntax">$EF03</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_F4</span><span class="plain-syntax"> = </span><span class="constant-syntax">$EF04</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_F5</span><span class="plain-syntax"> = </span><span class="constant-syntax">$EF05</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_F6</span><span class="plain-syntax"> = </span><span class="constant-syntax">$EF06</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_F7</span><span class="plain-syntax"> = </span><span class="constant-syntax">$EF07</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_F8</span><span class="plain-syntax"> = </span><span class="constant-syntax">$EF08</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_F9</span><span class="plain-syntax"> = </span><span class="constant-syntax">$EF09</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_F10</span><span class="plain-syntax"> = </span><span class="constant-syntax">$EF0A</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_F11</span><span class="plain-syntax"> = </span><span class="constant-syntax">$EF0B</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_F12</span><span class="plain-syntax"> = </span><span class="constant-syntax">$EF0C</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_HOME</span><span class="plain-syntax"> = </span><span class="constant-syntax">$21F1</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_LEFT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$2190</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_PAGE_DOWN</span><span class="plain-syntax"> = </span><span class="constant-syntax">$21DF</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_PAGE_UP</span><span class="plain-syntax"> = </span><span class="constant-syntax">$21DE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_RETURN</span><span class="plain-syntax"> = </span><span class="constant-syntax">$000A</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_RIGHT</span><span class="plain-syntax"> = </span><span class="constant-syntax">$2192</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_TAB</span><span class="plain-syntax"> = </span><span class="constant-syntax">$0009</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_UNKNOWN</span><span class="plain-syntax"> = </span><span class="constant-syntax">$FFFD</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">KEY_UP</span><span class="plain-syntax"> = </span><span class="constant-syntax">$2191</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. Paragraphing Flags. </b>I am not sure many dictionaries would countenance "to paragraph" as a
verb, but never mind: the reference here is to the algorithm used to place
paragraph breaks within text, which uses bitmaps composed of the following.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARA_COMPLETED</span><span class="plain-syntax">          = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARA_PROMPTSKIP</span><span class="plain-syntax">         = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARA_SUPPRESSPROMPTSKIP</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARA_NORULEBOOKBREAKS</span><span class="plain-syntax">   = </span><span class="constant-syntax">8</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARA_CONTENTEXPECTED</span><span class="plain-syntax">    = </span><span class="constant-syntax">16</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. Descriptors in the Language of Play. </b>The following constants are used in the <span class="extract"><span class="extract-syntax">LanguageDescriptors</span></span> table found
in the definition of the language of play.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">POSSESS_PK</span><span class="plain-syntax">   = </span><span class="constant-syntax">$100</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">DEFART_PK</span><span class="plain-syntax">    = </span><span class="constant-syntax">$101</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">INDEFART_PK</span><span class="plain-syntax">  = </span><span class="constant-syntax">$102</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">LIGHTED_PK</span><span class="plain-syntax">   = </span><span class="constant-syntax">$103</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">UNLIGHTED_PK</span><span class="plain-syntax"> = </span><span class="constant-syntax">$104</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. Auxiliary file structure. </b>The I7 kind of value "auxiliary-file" is an <span class="extract"><span class="extract-syntax">--&gt;</span></span> array, holding a memory
structure containing information about external files. The following
constants specify memory offsets and values. Note the safety value stored
as the first word of the structure: this helps protect the routines below
from accidents.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_MAGIC</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">First word holds a safety constant</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_MAGIC_VALUE</span><span class="plain-syntax"> = </span><span class="constant-syntax">16339</span><span class="plain-syntax">; </span><span class="comment-syntax">Should be first word of any valid file structure</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_STATUS</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax">One of the following:</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_STATUS_IS_CLOSED</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax">Currently closed, or perhaps doesn't exist</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_STATUS_IS_OPEN_FOR_READ</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_STATUS_IS_OPEN_FOR_WRITE</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_STATUS_IS_OPEN_FOR_APPEND</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
<span class="plain-syntax">    </span><span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_STATUS_IS_ERRONEOUS</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_BINARY</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">; </span><span class="comment-syntax">False for text files (I7 default), true for binary</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_STREAM</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</span><span class="plain-syntax">; </span><span class="comment-syntax">Stream for an open file (meaningless otherwise)</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_FILENAME</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">; </span><span class="comment-syntax">Packed address of constant string</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_IFID_OF_OWNER</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</span><span class="plain-syntax">; </span><span class="comment-syntax">UUID_ARRAY if owned by this project, or</span>
<span class="plain-syntax">    </span><span class="comment-syntax">string array of IFID of owner, or NULL to leave open</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">AUXF_RESOURCE_ID</span><span class="plain-syntax"> = </span><span class="constant-syntax">6</span><span class="plain-syntax">; </span><span class="comment-syntax">Only for internal files, identified by Blorb resource</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. Scope Searching Reasons. </b>The parser makes use of a mechanism for searching through the objects currently
"in scope", which basically means visible to the actor who would perform the
action envisaged by the command being parsed. It is sometimes useful to
behave differently depending on why this scope searching is being done, so
the following constants enumerate the possibilities.
</p>

<p class="commentary">I6's <span class="extract"><span class="extract-syntax">EACH_TURN_REASON</span></span>, <span class="extract"><span class="extract-syntax">REACT_BEFORE_REASON</span></span> and <span class="extract"><span class="extract-syntax">REACT_AFTER_REASON</span></span>
have been removed from this list as no longer meaningful; hence the lacuna
in numbering.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARSING_REASON</span><span class="plain-syntax">       = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">TALKING_REASON</span><span class="plain-syntax">       = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">EACH_TURN_REASON</span><span class="plain-syntax">     = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOOPOVERSCOPE_REASON</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">TESTSCOPE_REASON</span><span class="plain-syntax">     = </span><span class="constant-syntax">6</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. Token Types. </b>Tokens are the indecomposable pieces of a grammar line making up a possible
reading of a command; some are literal words, others stand for "any named
object in scope", and so on. The following codes identify the possibilities.
The <span class="extract"><span class="extract-syntax">*_TOKEN</span></span> constants must not be altered without modifying the I6 compiler
to match (so, basically, they must not be altered at all).
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ILLEGAL_TT</span><span class="plain-syntax">         = </span><span class="constant-syntax">0</span><span class="plain-syntax">;    </span><span class="comment-syntax">Types of grammar token: illegal</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ELEMENTARY_TT</span><span class="plain-syntax">      = </span><span class="constant-syntax">1</span><span class="plain-syntax">;    </span><span class="comment-syntax">    (one of those below)</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PREPOSITION_TT</span><span class="plain-syntax">     = </span><span class="constant-syntax">2</span><span class="plain-syntax">;    </span><span class="comment-syntax">    e.g. 'into'</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ROUTINE_FILTER_TT</span><span class="plain-syntax">  = </span><span class="constant-syntax">3</span><span class="plain-syntax">;    </span><span class="comment-syntax">    e.g. noun=CagedCreature</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ATTR_FILTER_TT</span><span class="plain-syntax">     = </span><span class="constant-syntax">4</span><span class="plain-syntax">;    </span><span class="comment-syntax">    e.g. edible</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">SCOPE_TT</span><span class="plain-syntax">           = </span><span class="constant-syntax">5</span><span class="plain-syntax">;    </span><span class="comment-syntax">    e.g. scope=Spells</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_TT</span><span class="plain-syntax">             = </span><span class="constant-syntax">6</span><span class="plain-syntax">;    </span><span class="comment-syntax">    a general parsing routine</span>

<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOUN_TOKEN</span><span class="plain-syntax">         = </span><span class="constant-syntax">0</span><span class="plain-syntax">;    </span><span class="comment-syntax">The elementary grammar tokens, and</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">HELD_TOKEN</span><span class="plain-syntax">         = </span><span class="constant-syntax">1</span><span class="plain-syntax">;    </span><span class="comment-syntax">the numbers compiled by I6 to</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTI_TOKEN</span><span class="plain-syntax">        = </span><span class="constant-syntax">2</span><span class="plain-syntax">;    </span><span class="comment-syntax">encode them</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTIHELD_TOKEN</span><span class="plain-syntax">    = </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTIEXCEPT_TOKEN</span><span class="plain-syntax">  = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTIINSIDE_TOKEN</span><span class="plain-syntax">  = </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CREATURE_TOKEN</span><span class="plain-syntax">     = </span><span class="constant-syntax">6</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">SPECIAL_TOKEN</span><span class="plain-syntax">      = </span><span class="constant-syntax">7</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">NUMBER_TOKEN</span><span class="plain-syntax">       = </span><span class="constant-syntax">8</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">TOPIC_TOKEN</span><span class="plain-syntax">        = </span><span class="constant-syntax">9</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ENDIT_TOKEN</span><span class="plain-syntax">        = </span><span class="constant-syntax">15</span><span class="plain-syntax">;   </span><span class="comment-syntax">Value used to mean "end of grammar line"</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. GPR Return Values. </b>GRP stands for "General Parsing Routine", an I6 routine which acts as a
grammar token: again, see the {\it Inform Designer's Manual}, 4th edition,
for details.
</p>

<p class="commentary">In Library 6/11, <span class="extract"><span class="extract-syntax">GPR_NOUN</span></span> is defined as <span class="extract"><span class="extract-syntax">$ff00</span></span>, but this would fail on
Glulx: it needs to be <span class="extract"><span class="extract-syntax">$ffffff00</span></span> on 32-bit virtual machines. It appears that
<span class="extract"><span class="extract-syntax">GPR_NOUN</span></span> to <span class="extract"><span class="extract-syntax">GPR_CREATURE</span></span>, though documented in the old {\it Inform
Translator's Manual}, were omitted when this was consolidated into the DM4,
so that they effectively disappeared from view. But they might still be
useful for implementing inflected forms of nouns, so we have retained them
here regardless.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_FAIL</span><span class="plain-syntax">           = -1;   </span><span class="comment-syntax">Return values from General Parsing</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_PREPOSITION</span><span class="plain-syntax">    = </span><span class="constant-syntax">0</span><span class="plain-syntax">;    </span><span class="comment-syntax">Routines</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_NUMBER</span><span class="plain-syntax">         = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_MULTIPLE</span><span class="plain-syntax">       = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_REPARSE</span><span class="plain-syntax">        = </span><span class="identifier-syntax">REPARSE_CODE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_NOUN</span><span class="plain-syntax">           = -256; </span><span class="comment-syntax">Reparse, but as </span><span class="extract"><span class="extract-syntax">NOUN_TOKEN</span></span><span class="comment-syntax"> this time</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_HELD</span><span class="plain-syntax">           = </span><span class="identifier-syntax">GPR_NOUN</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax">And so on</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_MULTI</span><span class="plain-syntax">          = </span><span class="identifier-syntax">GPR_NOUN</span><span class="plain-syntax"> + </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_MULTIHELD</span><span class="plain-syntax">      = </span><span class="identifier-syntax">GPR_NOUN</span><span class="plain-syntax"> + </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_MULTIEXCEPT</span><span class="plain-syntax">    = </span><span class="identifier-syntax">GPR_NOUN</span><span class="plain-syntax"> + </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_MULTIINSIDE</span><span class="plain-syntax">    = </span><span class="identifier-syntax">GPR_NOUN</span><span class="plain-syntax"> + </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">GPR_CREATURE</span><span class="plain-syntax">       = </span><span class="identifier-syntax">GPR_NOUN</span><span class="plain-syntax"> + </span><span class="constant-syntax">6</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. List Styles. </b>These constants make up bitmaps of the options in use when listing objects.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">NEWLINE_BIT</span><span class="plain-syntax">        = </span><span class="constant-syntax">$$0000000000000001</span><span class="plain-syntax">; </span><span class="comment-syntax">New-line after each entry</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">INDENT_BIT</span><span class="plain-syntax">         = </span><span class="constant-syntax">$$0000000000000010</span><span class="plain-syntax">; </span><span class="comment-syntax">Indent each entry by depth</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">FULLINV_BIT</span><span class="plain-syntax">        = </span><span class="constant-syntax">$$0000000000000100</span><span class="plain-syntax">; </span><span class="comment-syntax">Full inventory information after entry</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ENGLISH_BIT</span><span class="plain-syntax">        = </span><span class="constant-syntax">$$0000000000001000</span><span class="plain-syntax">; </span><span class="comment-syntax">English sentence style, with commas and and</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">RECURSE_BIT</span><span class="plain-syntax">        = </span><span class="constant-syntax">$$0000000000010000</span><span class="plain-syntax">; </span><span class="comment-syntax">Recurse downwards with usual rules</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ALWAYS_BIT</span><span class="plain-syntax">         = </span><span class="constant-syntax">$$0000000000100000</span><span class="plain-syntax">; </span><span class="comment-syntax">Always recurse downwards</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">TERSE_BIT</span><span class="plain-syntax">          = </span><span class="constant-syntax">$$0000000001000000</span><span class="plain-syntax">; </span><span class="comment-syntax">More terse English style</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARTINV_BIT</span><span class="plain-syntax">        = </span><span class="constant-syntax">$$0000000010000000</span><span class="plain-syntax">; </span><span class="comment-syntax">Only brief inventory information after entry</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">DEFART_BIT</span><span class="plain-syntax">         = </span><span class="constant-syntax">$$0000000100000000</span><span class="plain-syntax">; </span><span class="comment-syntax">Use the definite article in list</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">WORKFLAG_BIT</span><span class="plain-syntax">       = </span><span class="constant-syntax">$$0000001000000000</span><span class="plain-syntax">; </span><span class="comment-syntax">At top level (only), only list objects</span>
<span class="plain-syntax">                                                  </span><span class="comment-syntax">which have the "workflag" attribute</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ISARE_BIT</span><span class="plain-syntax">          = </span><span class="constant-syntax">$$0000010000000000</span><span class="plain-syntax">; </span><span class="comment-syntax">Print " is" or " are" before list</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONCEAL_BIT</span><span class="plain-syntax">        = </span><span class="constant-syntax">$$0000100000000000</span><span class="plain-syntax">; </span><span class="comment-syntax">Omit objects with "concealed" or "scenery":</span>
<span class="plain-syntax">                                                  </span><span class="comment-syntax">if WORKFLAG_BIT also set, then does not</span>
<span class="plain-syntax">                                                  </span><span class="comment-syntax">apply at top level, but does lower down</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOARTICLE_BIT</span><span class="plain-syntax">      = </span><span class="constant-syntax">$$0001000000000000</span><span class="plain-syntax">; </span><span class="comment-syntax">Print no articles, definite or not</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">EXTRAINDENT_BIT</span><span class="plain-syntax">    = </span><span class="constant-syntax">$$0010000000000000</span><span class="plain-syntax">; </span><span class="comment-syntax">New in I7: extra indentation of 1 level</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">CFIRSTART_BIT</span><span class="plain-syntax">      = </span><span class="constant-syntax">$$0100000000000000</span><span class="plain-syntax">; </span><span class="comment-syntax">Capitalise first article in list</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. Lengths Of Time. </b>Inform measures time in minutes.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">QUARTER_HOUR</span><span class="plain-syntax"> = </span><span class="constant-syntax">15</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">HALF_HOUR</span><span class="plain-syntax"> = </span><span class="constant-syntax">30</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">ONE_HOUR</span><span class="plain-syntax"> = </span><span class="constant-syntax">60</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">TWELVE_HOURS</span><span class="plain-syntax"> = </span><span class="constant-syntax">720</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">TWENTY_FOUR_HOURS</span><span class="plain-syntax"> = </span><span class="constant-syntax">1440</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. Empty Text. </b>The I6 compiler does not optimise string compilation: if it needs to compile
the (packed, read-only) string <span class="extract"><span class="extract-syntax">"exemplum"</span></span> twice, it will compile two copies.
This is slightly wasteful on memory, though in practice the loss is not
enough for us to care. But we do want to avoid this in I7 because, to make
string-sorting algorithms more efficient, we want direct numerical comparison
of packed addresses to be equivalent to string comparison: and that means
the text "exemplum" has to be compiled once and once only. There's a
general mechanism for this in Inform, but the single case most often needed
is the empty text, since this is the default value for text variables
and properties: we give it a name as follows.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_TEXT_PACKED</span><span class="plain-syntax"> </span><span class="string-syntax">""</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_TEXT_VALUE</span><span class="plain-syntax"> --&gt; </span><span class="identifier-syntax">CONSTANT_PACKED_TEXT_STORAGE</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_TEXT_PACKED</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. Empty Table. </b>Similarly: the default value for the "table" kind of value, a Table
containing no rows and no columns.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">Array</span><span class="plain-syntax"> </span><span class="identifier-syntax">TheEmptyTable</span><span class="plain-syntax"> --&gt; </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. Empty Set. </b>The falsity proposition describes the empty set of objects, and is the
zero value for the "description" kind of value.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">[ </span><span class="identifier-syntax">Prop_Falsity</span><span class="plain-syntax"> </span><span class="identifier-syntax">reason</span><span class="plain-syntax"> </span><span class="identifier-syntax">obj</span><span class="plain-syntax">; </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; ];</span>
</pre>
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. Template Attributes. </b>An I6 attribute is equivalent to an I7 "either/or property", though the
latter are not always translated into I6 attributes because the Z-machine
has only a limited number of attributes to use. Here, we define attributes
used by the template.
</p>

<p class="commentary">Many concepts in I6 correspond directly to their successors in I7, even if
details may vary. (Value properties are a case in point.) Attributes are
the opposite of this: indeed, no I6 concept is more fragmented in its I7
equivalents. All but one of the old I6 library attributes are still used
(the <span class="extract"><span class="extract-syntax">general</span></span> attribute, for miscellaneous use, has been removed: it more
often invited abuse than use); and a few new attributes have been added.
But they are used for a variety of purposes. Some do correspond exactly to
either/or properties in I7, but others are a sort of signature for I7
kinds. (So that for I7 use they are read-only.) Others still are used by
the template layer as part of the implementation of services for I7, but
are not visible to I7 source text as storage.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">absent</span><span class="plain-syntax">; </span><span class="comment-syntax">Used to mark objects removed from play</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">animate</span><span class="plain-syntax">; </span><span class="comment-syntax">I6-level marker for I7 kind "person"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">clothing</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "wearable"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">concealed</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "undescribed"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">container</span><span class="plain-syntax">; </span><span class="comment-syntax">I6-level marker for I7 kind "container"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">door</span><span class="plain-syntax">; </span><span class="comment-syntax">I6-level marker for I7 kind "door"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">edible</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "edible" vs "inedible"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">enterable</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "enterable"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">light</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "lighted" vs "dark"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">lockable</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "lockable"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">locked</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "locked"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">moved</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "handled"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">on</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "switched on" vs "switched off"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">open</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "open" vs "closed"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">openable</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "openable"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">scenery</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "scenery"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">static</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "fixed in place" vs "portable"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">supporter</span><span class="plain-syntax">; </span><span class="comment-syntax">I6-level marker for I7 kind "supporter"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">switchable</span><span class="plain-syntax">; </span><span class="comment-syntax">I6-level marker for I7 kind "device"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">talkable</span><span class="plain-syntax">; </span><span class="comment-syntax">Not currently used by I7, but retained for possible future use</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">transparent</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "transparent" vs "opaque"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">visited</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "visited"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">worn</span><span class="plain-syntax">; </span><span class="comment-syntax">marks that an object tree edge represents wearing</span>

<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">male</span><span class="plain-syntax">; </span><span class="comment-syntax">not directly used by I7, but available for languages with genders</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">female</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "female" vs "male"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">neuter</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "neuter"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">pluralname</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "plural-named"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">ambigpluralname</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "ambiguously plural"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">proper</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "proper-named"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">remove_proper</span><span class="plain-syntax">; </span><span class="comment-syntax">remember to remove proper again when using ChangePlayer next</span>

<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">privately_named</span><span class="plain-syntax">; </span><span class="comment-syntax">New in I7</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">mentioned</span><span class="plain-syntax">; </span><span class="comment-syntax">New in I7</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">pushable</span><span class="plain-syntax">; </span><span class="comment-syntax">New in I7</span>

<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">mark_as_room</span><span class="plain-syntax">; </span><span class="comment-syntax">Used in I7 to speed up testing "ofclass K1_room"</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">mark_as_thing</span><span class="plain-syntax">; </span><span class="comment-syntax">Used in I7 to speed up testing "ofclass K2_thing"</span>

<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">workflag</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "marked for listing", but basically temporary workspace</span>
<span class="identifier-syntax">Attribute</span><span class="plain-syntax"> </span><span class="identifier-syntax">workflag2</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7 and also temporary workspace</span>
<span class="reserved-syntax">Constant</span><span class="plain-syntax"> </span><span class="identifier-syntax">list_filter_permits</span><span class="plain-syntax"> = </span><span class="identifier-syntax">privately_named</span><span class="plain-syntax">; </span><span class="comment-syntax">another I7 listwriter convenience</span>
</pre>
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. Template Properties. </b>As remarked above, these more often correspond to value properties in I7.
To an experienced I6 user, though, the death toll of abolished I6
properties in I7 is breathtaking: in alphabetical order, <span class="extract"><span class="extract-syntax">after</span></span>,
<span class="extract"><span class="extract-syntax">cant_go</span></span>, <span class="extract"><span class="extract-syntax">daemon</span></span>, <span class="extract"><span class="extract-syntax">each_turn</span></span>, <span class="extract"><span class="extract-syntax">invent</span></span>, <span class="extract"><span class="extract-syntax">life</span></span>, <span class="extract"><span class="extract-syntax">number</span></span>, <span class="extract"><span class="extract-syntax">orders</span></span>,
<span class="extract"><span class="extract-syntax">react_after</span></span>, <span class="extract"><span class="extract-syntax">react_before</span></span>, <span class="extract"><span class="extract-syntax">time_left</span></span>, <span class="extract"><span class="extract-syntax">time_out</span></span>, <span class="extract"><span class="extract-syntax">when_closed</span></span>,
<span class="extract"><span class="extract-syntax">when_off</span></span>, <span class="extract"><span class="extract-syntax">when_on</span></span>, <span class="extract"><span class="extract-syntax">when_open</span></span>. In May 2008, the direction properties
<span class="extract"><span class="extract-syntax">n_to</span></span>, <span class="extract"><span class="extract-syntax">s_to</span></span>, <span class="extract"><span class="extract-syntax">e_to</span></span>, ..., <span class="extract"><span class="extract-syntax">out_to</span></span> joined the list of the missing.
</p>

<p class="commentary">The losses are numerous because of the shift from I6's object orientation
to I7's rule orientation: information about the behaviour of objects is no
longer thought of as data attached to them. At that, it could have been
worse: a few unused I6 library properties have been retained for possible
future use.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">add_to_scope</span><span class="plain-syntax">; </span><span class="comment-syntax">used as in I6 to place component parts in scope</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">article</span><span class="plain-syntax"> </span><span class="string-syntax">"a"</span><span class="plain-syntax">; </span><span class="comment-syntax">used as in I6 to implement articles</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">capacity</span><span class="plain-syntax"> </span><span class="constant-syntax">100</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "carrying capacity"</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">component_child</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7: forest structure holding "part of" relation</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">component_parent</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">component_sibling</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">description</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "description"</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">door_dir</span><span class="plain-syntax">; </span><span class="comment-syntax">used to implement two-sided doors, but holds direction object, not a property</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">door_to</span><span class="plain-syntax">; </span><span class="comment-syntax">used as in I6 to implement two-sided doors</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">found_in</span><span class="plain-syntax">; </span><span class="comment-syntax">used as in I6 to implement two-sided doors and backdrops</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">initial</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "initial description"</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">list_together</span><span class="plain-syntax">; </span><span class="comment-syntax">used as in I6 to implement "grouping together" activity</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">map_region</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_name</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">used as in I6 to implement "Understand... as..." grammars</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural</span><span class="plain-syntax">; </span><span class="comment-syntax">used as in I6 to implement plural names for duplicate objects</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">regional_found_in</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">room_index</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7: storage for route-finding</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">short_name</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "printed name"</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">saved_short_name</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">cache for ChangePlayer</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">vector</span><span class="plain-syntax">; </span><span class="comment-syntax">new in I7: storage for route-finding</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">with_key</span><span class="plain-syntax">; </span><span class="comment-syntax">= I7 "matching key"</span>

<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">KD_Count</span><span class="plain-syntax">; </span><span class="comment-syntax">Instance count of the kind of the current object</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK1_Count</span><span class="plain-syntax">; </span><span class="comment-syntax">These are instance counts within kinds K1, K2, ...</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK2_Count</span><span class="plain-syntax">; </span><span class="comment-syntax">and it is efficient to declare the common ones with Property</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK4_Count</span><span class="plain-syntax">; </span><span class="comment-syntax">since this results in a slightly smaller story file</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK5_Count</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK6_Count</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK8_Count</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK3_Count</span><span class="plain-syntax">;</span>

<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK1_link</span><span class="plain-syntax">; </span><span class="comment-syntax">These are for linked lists used to make searches faster</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK2_link</span><span class="plain-syntax">; </span><span class="comment-syntax">and again it's memory-efficient to declare the common ones</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK5_link</span><span class="plain-syntax">; </span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK6_link</span><span class="plain-syntax">; </span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">IK8_link</span><span class="plain-syntax">; </span>

<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">articles</span><span class="plain-syntax">; </span><span class="comment-syntax">not used by I7, but an interesting hook in the parser</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">grammar</span><span class="plain-syntax">; </span><span class="comment-syntax">not used by I7, but an interesting hook in the parser</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">inside_description</span><span class="plain-syntax">; </span><span class="comment-syntax">not used by I7, but an interesting hook in the locale code</span>
<span class="identifier-syntax">Property</span><span class="plain-syntax"> </span><span class="identifier-syntax">short_name_indef</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax">not used by I7, but an interesting hook in the listmaker</span>
</pre>
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. Formal Parameters. </b>These are needed for efficient run-time ambiguity resolution.
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_rv</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par0</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par1</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par2</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par3</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par4</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par5</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par6</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">formal_par7</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">Global</span><span class="plain-syntax"> </span><span class="identifier-syntax">unicode_temp</span><span class="plain-syntax">;</span>
</pre>
<nav role="progress"><div class="progresscontainer">
    <ul class="progressbar"><li class="progressprevoff">&#10094;</li><li class="progresscurrent">dfn</li><li class="progresssection"><a href="S-str.html">str</a></li><li class="progresssection"><a href="S-utl.html">utl</a></li><li class="progresssection"><a href="S-prg.html">prg</a></li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-srt.html">srt</a></li><li class="progresssection"><a href="S-tbl.html">tbl</a></li><li class="progresssection"><a href="S-mst.html">mst</a></li><li class="progresssection"><a href="S-rlb.html">rlb</a></li><li class="progresssection"><a href="S-act.html">act</a></li><li class="progresssection"><a href="S-prn.html">prn</a></li><li class="progresssection"><a href="S-flx.html">flx</a></li><li class="progresssection"><a href="S-blc.html">blc</a></li><li class="progresssection"><a href="S-knd.html">knd</a></li><li class="progresssection"><a href="S-txt.html">txt</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-rgx.html">rgx</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-cmb.html">cmb</a></li><li class="progresssection"><a href="S-rlt.html">rlt</a></li><li class="progresssection"><a href="S-rlt2.html">rlt2</a></li><li class="progresssection"><a href="S-prp.html">prp</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progressnext"><a href="S-str.html">&#10095;</a></li></ul></div>
</nav><!-- End of weave -->

		</main>
	</body>
</html>

